View Javadoc

1   package uba.db.column;
2   
3   import java.io.DataInput;
4   import java.io.DataOutput;
5   
6   import uba.db.column.io.ColumnReader;
7   import uba.db.column.io.ColumnWriter;
8   import uba.db.table.Table;
9   
10  /***
11   * Especifica como es una columna (su nombre, y sus constraints) y su "tipo".<br>
12   * 
13   * Notar que el "tipo" esta especificado por la clase concreta que implementa
14   * esta interfaz, se pudo haber modelado el tipo explictamente (siendo este un
15   * "type object"), sin embargo como no es necesario cambiar el tipo dinamicamte
16   * ni agrupar instancias (dos de las razones para utilizar un type object) la
17   * complejidad agregada por el uso del type object no estaría del todo
18   * justificada.
19   * 
20   * @see "Type Object pattern"
21   * 
22   * @version $Revision: 1.3 $
23   */
24  public interface ColumnSpecification {
25      /***
26       * Retorna el nombre de la columna.
27       */
28      String name();
29  
30      /***
31       * Retorna <i>true</i> si la columna NO puede ser <i>null</i>.<br>
32       * Este método es un atajo para: constraint().notNull()
33       */
34      boolean notNull();
35  
36      /***
37       * Retorna el constraint que existe sobre esta columna (si puede ser o no
38       * null -- o en un futuro si el valor debe estar dentro de un determinado
39       * rango--).
40       */
41      ColumnConstraint constraint();
42      
43      /***
44       * Retorna un {@link ColumnReader} especifico para leer la columna que representa
45       * esta especificación.
46       *
47       * @param in el stream que utilizará el reader.
48       */
49      ColumnReader readerFor(DataInput in);
50      
51      /***
52       * Retorna un {@link ColumnWriter} especifico para leer la columna que representa
53       * esta especificación.
54       * 
55       * @param out el stream que utilizará el reader.
56       */
57      ColumnWriter writerFor(DataOutput out);
58      
59      /***
60       * Retorna <i>true</i> si la columna se llama <i>name</i>.<br>
61       * La implementación debe ignorar las mayuculas/minusculas si es necesario.
62       *
63       * @param nameToTest string con el nombre a chequear
64       */
65      boolean isNamed(String nameToTest);
66  
67      /***
68       * Retorna un string que representa el tipo de datos de la clase concreta de esta
69       * especificación de columna.<br>
70       * NOTA: este string debe ser utilizado para mostrar el tipo de la columna, nunca
71       * para derivar comportamiento en base a eso.
72       */
73      String dataTypeDisplayString();
74      
75      Column asColumnFor(Table table);
76  }